//用于管理一个包含背包系统的物体
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public abstract class InventoryHolder : MonoBehaviour
{
    [SerializeField] private int inventorySize;//表示背包系统的大小
    [SerializeField] protected int offset = 10;// 背包界面中第一个物品槽的偏移量（快捷栏数）
    public int Offset => offset;
    [SerializeField] protected int _gold;//玩家金币量    
    [SerializeField] protected InventorySystem inventorySystem;//用于存储实际的背包系统
    public InventorySystem PrimaryInventorySystem => inventorySystem;//用于访问和编辑背包系统
    public static UnityAction<InventorySystem, int> OnDynamicInventoryDisplayRequested;//当需要在某个地方动态显示背包系统时，会触发该事件，并传递背包系统作为参数
    protected virtual void Awake()
    {
        SaveLoad.OnLoadGame += LoadInventory;// 注册加载游戏事件

        //创建一个具有指定大小的背包系统
        inventorySystem = new InventorySystem(inventorySize, _gold);
    }

    protected abstract void LoadInventory(SaveData saveData);// 加载背包的抽象方法
}

[System.Serializable]
public struct InventorySaveData
{
    public InventorySystem invSystem; // 背包的物品系统
    public Vector3 position; // 背包的位置
    public Quaternion rotation; // 背包的旋转角度

    public InventorySaveData(InventorySystem _invSystem, Vector3 _position, Quaternion _rotation)
    {
        invSystem = _invSystem;
        position = _position;
        rotation = _rotation;
    }

    public InventorySaveData(InventorySystem _invSystem)
    {
        invSystem = _invSystem;
        position = Vector3.zero;
        rotation = Quaternion.identity;
    }
}